package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
)

func main() {
	filename := "user.txt"
	// 使用os.Create打开文件，如果文件不存在则创建
	file, err := os.Create(filename)
	if err != nil {
		fmt.Println("Error creating file:", err)
		return
	}

	// 在这里进行文件读写操作...

	myMap := make(map[string]map[string]string)

	for {
		fmt.Println("1、登录*** 2、注册*** 3、退出***")
		reader := bufio.NewReader(os.Stdin)
		input, _ := reader.ReadByte()
		if input == '3' { //输入为3则退出程序
			fmt.Println("程序结束")
			break //输入为1则登录
		} else if input == '1' {
			fmt.Println("请输入用户名：")
			reader := bufio.NewReader(os.Stdin)
			username, _ := reader.ReadString('\n')
			username = username[:len(username)-2]
			if value, ok := myMap[username]; ok {
				fmt.Println(value, "用户名已存在！")
				break
			} else {
				var passwd, age, sex string
				fmt.Print("请输入密码: ") //不存在则继续输入密码等信息
				fmt.Scanln(&passwd)
				fmt.Print("请输入年龄: ")
				fmt.Scanln(&age)
				fmt.Print("请输入性别: ")
				fmt.Scanln(&sex)
				myMap[username] = make(map[string]string)
				myMap[username][passwd] = passwd
				myMap[username][age] = age
				myMap[username][sex] = sex
				user_str, err := json.Marshal(myMap)
				if err != nil {
					fmt.Println("转换出错")
				} else {
					fmt.Println("转换成功")
					//fmt.Printf("转换之后的数据类型：%T\n", user_str)  //[]uint8
					//fmt.Println(user_str, string(user_str)) //一串字节码，[123 34 114 111 111 116 34 58 123 34 112 97 115 115 119 100 34 58 34 49 50 51 52 53 54 34 125 125]
				}
				_, err = file.WriteString(string(user_str))
			}
		} else if input == '2' { //注册新用户
			fmt.Println("请输入用户名：")
			reader := bufio.NewReader(os.Stdin)
			username, _ := reader.ReadString('\n')
			username = username[:len(username)-2]
			data_str, _ := os.ReadFile(filename) //读文件
			var dataMap map[string]map[string]string
			err = json.Unmarshal([]byte(data_str), &dataMap)
			if value, ok := myMap[username]; ok {
				fmt.Println(value, "用户已存在，请输入密码：")
				reader := bufio.NewReader(os.Stdin)
				passwd, _ := reader.ReadString('\n')
				passwd = passwd[:len(passwd)-2]
				if passwd == dataMap[username][passwd] {
					fmt.Println("登陆成功！")
				}
			}
		} else {
			fmt.Println("请按指示输入") //如果不输入1、2、3
		}

	}
	file.Close()
}
